package com.drug.mingkang.permission.service.impl;

import com.drug.mingkang.permission.model.PerModule;
import com.drug.mingkang.permission.mapper.PerModuleMapper;
import com.drug.mingkang.permission.service.PerModuleService;
import com.drug.mingkang.utils.ResponseMessage;
import com.drug.mingkang.utils.Tools;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

/**
 * 模块表(PerModule)表服务实现类
 *
 * @author wenchangjian
 * @since 2020-08-11 12:00:14
 */
@Service("perModuleService")
public class PerModuleServiceImpl implements PerModuleService {
    @Resource
    private PerModuleMapper perModuleMapper;

    @Resource
    Tools tools;

    /**
     * 通过ID查询单条数据
     *
     * @param moduleId 主键
     * @return 实例对象
     */
    @Override
    public PerModule queryById(String moduleId) {
        return this.perModuleMapper.queryById(moduleId);
    }

    /**
     * 查询多条数据
     * @param page 页数
     * @param limit 查询条数
     * @param moduleName
     * @param type
     * @return 对象列表
     */
    @Override
    public Map<String, Object> queryAllByLimit(Integer page, Integer limit, String moduleName, String type) {
        return tools.limit(perModuleMapper.queryAllByLimit((page - 1) * limit, limit, moduleName,type), perModuleMapper.count(moduleName,type));
    }

    /**
     * 新增数据
     *
     * @param perModule 实例对象
     * @return 实例对象
     */
    @Override
    public PerModule insert(PerModule perModule) {
        this.perModuleMapper.insert(perModule);
        return perModule;
    }

    /**
     * 修改数据
     *
     * @param perModule 实例对象
     * @return 实例对象
     */
    @Override
    public PerModule update(PerModule perModule) {
        this.perModuleMapper.update(perModule);
        return this.queryById(perModule.getModuleId());
    }

    @Override
    public ResponseMessage insertAndEdit(PerModule perModule) {
        if(StringUtils.isEmpty(perModule.getModuleId())){
           return this.perModuleMapper.insertSelective(perModule) > 0 ? ResponseMessage.success("增加成功") : ResponseMessage.error("增加失败");
        }else{
            return this.perModuleMapper.updateMes(perModule) > 0 ? ResponseMessage.success("编辑成功") : ResponseMessage.error("编辑失败");
        }
    }

    /**
     * 通过主键删除数据
     *
     * @param moduleId 主键
     * @return 是否成功
     */
    @Override
    public ResponseMessage deleteById(String moduleId) {
        return this.perModuleMapper.deleteById(moduleId) > 0 ? ResponseMessage.success("删除成功") : ResponseMessage.error("删除失败");
    }

    @Override
    public List<PerModule> queryAll(PerModule perModule) {
        return this.perModuleMapper.queryAll(perModule);
    }

    /**
     * 根据模块id 查询所有父模块id为模块id
     * @param modMId 模块id
     * @return
     */
    @Override
    public List<PerModule> selectParent(String modMId) {
        return this.perModuleMapper.selectParent(modMId);
    }

    /**
     * 通过数组主键删除数据
     * @param arr
     * @return
     */
    @Override
    public ResponseMessage deleteAll(String[] arr) {
        return this.perModuleMapper.deleteAll(arr)>= arr.length - 1 ? ResponseMessage.success("删除成功") : ResponseMessage.error("删除失败");
    }

    /**
     * 根据用户查询所有模块
     * @param userId
     * @return
     */
    @Override
    public List<PerModule> findByUserIdModuleAll(Integer userId) {
        return this.perModuleMapper.findByUserIdModuleAll(userId);
    }

    /**
     * 根据用户查询所有模块 (菜单 目录 按钮)
     * @param userId
     * @return
     */
    @Override
    public List<PerModule> findByUserIdModuleAllButton(Integer userId) {
        return this.perModuleMapper.findByUserIdModuleAllButton(userId);
    }
}